package com.zhanghp.class011;

import com.zhanghp.common.ListNode;

/**
 * 给你两个 非空 的链表，表示两个非负的整数
 * 它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头
 * 测试链接：https://leetcode.cn/problems/add-two-numbers/
 *
 * @author zhanghp
 * @since 2024/2/21 14:20
 */
public class AddTwoNumbers {

    public static void main(String[] args) {
        System.out.println(9 / 10);
        System.out.println(9 % 10);
    }

    static class Solution {
        public static void main(String[] args) {
            ListNode a = new ListNode(1);
            ListNode b = new ListNode(2);
            a.next = new ListNode(3);
            ListNode listNode = addTwoNumbers(a, b);
        }
        public static ListNode addTwoNumbers(ListNode head1, ListNode head2) {
            ListNode ans = null, cur = null;
            // 进位
            int carry = 0;
            for (
                    int sum, val = 0;
                    // 2个都为空才打破循环
                    head1 != null || head2 != null;
                    // 赋值
                    head1 = head1 == null ? null : head1.next,
                            head2 = head2 == null ? null : head2.next
            ) {
                sum = (head1 == null ? 0 : head1.val) + (head2 == null ? 0 : head2.val) + carry;

                val = sum % 10;
                carry = sum / 10;
                if (ans == null) {
                    ans = new ListNode(val);
                    cur = ans;
                } else {
                    cur.next = new ListNode(val);
                    cur = cur.next;
                }
            }
            if (carry == 1) {
                cur.next = new ListNode(carry);
            }
            return ans;
        }
    }
}
